(define (p) (p))

(define (test x y)
  (if (= x 0)
      0
      y))

(test 0 (p))

;O teste quando executado na ordem normal provoca uma recursão infinita, pois as subexpressões são pré-avaliadas
;e a definição de (p) é recursiva e sem condição de parada.
;Já na ordem de aplicação a expressão (p) é passada para a procedure test como o argumento y
;O predicado do operador if
;(= x 0)
;é avaliado primeiro, como assumido pelo enunciado.
;como x recebe o valor 0 no teste o predicado é verdadeiro e o valor 0 é retornado.
; Neste caso a expressão (p) não foi usada e, pela definição desta ordem de avaliação 
; não foi avaliada e a recursão não ocorreu.